package com.jacob.androidstudy.androidnote.service;

import android.app.IntentService;
import android.content.Intent;

/**
 * android.app.IntentService
 * IntentService是Service的一个子类。IntentService使用独立的线程，1次1个的方式处理所有的请求。
 * 因为大多数的Started Service不需要同时处理多个请求（同时处理多请求是个危险的多线程场景），所以一般可以使用IntentService就可以了。
 * 
 * IntentService创建1个默认线程（和程序的主线程是区分开的），将所有的Intent对象送给onStartCommand()方法。
 * IntentService创建1个队列，1次将1个Intent对象传给onHandleIntent()方法，所以不需要担心多线程问题。
 * 全部请求都处理完后，系统会停止IntentService，所以手工停止不再是必须的了。
 * IntentService默认提供的onBind()方法，返回null。
 * IntentService默认提供的onStartCommand()，会将Intent对象传入队列，然后再传给onHandleIntent()方法。
 * 综上所述，只要提供无参构造，并覆盖onHandleIntent()即可。
 * 
 * 
 * 
 * IntentService的生成步骤：
 * 1 定义IntentService，并继承于android.app.IntentService。
 * 2 在AndroidManifest.xml中注册定义好的IntentService。
 * 3 定义IntentService的无参构造，并在构造里调用super("name")。
 * 4 在IntentService中编写业务方法。
 * 5 在onHandleIntent()方法中，调用需要执行的代码和业务方法。
 * 6 在Activity中调用startService(new Intent(this,Service.class))，启动IntentService。
 * 7 IntentService启动时，会依次调用onCreate()方法、onStartCommand()方法。然后新开一个线程，执行onHandleIntent()方法。执行完毕后，线程停止，并调用onDestroy()方法销毁IntentService对象。
 * 8 IntentService适用于处理单一的、临时的或一次性的请求。
 * 9 
 * 
 * 
 */
public class 用于异步的IntentService extends IntentService {

	/**
	 * startService(new Intent(this,Service.class))启动IntentService时，是使用无参的构造方法实例化IntentService的。 
	 * 所以要显式写出无参构造，并调用super("name")。"name"就是独立线程的名字。
	 * 
	 * 
	 */
	public 用于异步的IntentService() {
		super("IntentService");
	}
	
	
	
	@Override
	protected void onHandleIntent(Intent arg0) {
		// TODO Auto-generated method stub

	}

	
	/**
	 * 如果需要覆盖其他方法，必须在方法中调用父类的相同方法，否则IntentService的特性将失效。
	 * 例如，onStartCommand()方法必须返回super.onStartCommand(intent, flags, startId)，否则Intent对象就不会再传给onHandleIntent()方法了。
	 * 
	 */
	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
	}
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		// TODO Auto-generated method stub
		return super.onStartCommand(intent, flags, startId);
	}

	@Override
	public void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
	}
	
	

}
